package com.sh.rbac.service.impl;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sh.rbac.domain.converter.FileConfigConverter;
import com.sh.rbac.domain.dto.fileConfig.FileConfigQueryDTO;
import com.sh.rbac.domain.dto.fileConfig.FileConfigSaveDTO;
import com.sh.rbac.domain.dto.fileConfig.FileConfigUpdateDTO;
import com.sh.rbac.domain.entity.FileConfig;
import com.sh.rbac.mapper.FileConfigMapper;
import com.sh.rbac.service.FileConfigService;
import org.springframework.stereotype.Service;

/**
 * @author lucky
 * @description 针对表【sys_file_config(系统文件配置表)】的数据库操作Service实现
 * @createDate 2025-10-14 14:10:13
 */
@Service
public class FileConfigServiceImpl extends ServiceImpl<FileConfigMapper, FileConfig>
        implements FileConfigService {

    @Override
    public Page<FileConfig> getPage(Long current, Long limit, FileConfigQueryDTO fileConfigQueryDTO) {
        String name = fileConfigQueryDTO.getName();
        Integer isDefault = fileConfigQueryDTO.getIsDefault();

        LambdaQueryWrapper<FileConfig> lqw = new LambdaQueryWrapper<>();
        lqw.like(StrUtil.isNotBlank(name), FileConfig::getName, name);
        lqw.eq(isDefault != null, FileConfig::getIsDefault, isDefault);

        return this.page(Page.of(current, limit), lqw);
    }

    @Override
    public boolean save(FileConfigSaveDTO fileConfigSaveDTO) {
        FileConfig fileConfig = FileConfigConverter.INSTANCE.toEntity(fileConfigSaveDTO);
        return super.save(fileConfig);
    }

    @Override
    public boolean updateById(FileConfigUpdateDTO fileConfigUpdateDTO) {
        FileConfig fileConfig = FileConfigConverter.INSTANCE.toEntity(fileConfigUpdateDTO);
        return super.updateById(fileConfig);
    }

    @Override
    public boolean updateStatus(Long id, Integer status) {
        FileConfig fileConfig = new FileConfig();
        fileConfig.setId(id);
        fileConfig.setIsDefault(status);


        if (status.equals(1)) {
            LambdaQueryWrapper<FileConfig> lqw = new LambdaQueryWrapper<>();
            lqw.eq(FileConfig::getIsDefault, 1);

            FileConfig f = new FileConfig();
            f.setIsDefault(0);

            super.update(f, lqw);
        }

        super.updateById(fileConfig);

        return true;
    }

    @Override
    public FileConfig getDefaultConfig() {
        LambdaQueryWrapper<FileConfig> lqw = new LambdaQueryWrapper<>();
        lqw.eq(FileConfig::getIsDefault, 1);

        return super.getOne(lqw);
    }
}




